﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NHTU;
using System.IO;
using System.Threading;
namespace NOMFinalSettlement.AppForm.App
{
    public partial class fRestore : DevComponents.DotNetBar.Office2007Form
    {
        NOMFinalSettlement.Classes.BackupDatabase _bak = new NOMFinalSettlement.Classes.BackupDatabase();

        string currentFile = "";
        public fRestore()
        {
            InitializeComponent();
        }

        private void fRestore_Load(object sender, EventArgs e)
        {
            _bak.LoadSetting();
            _bak.ListBackupFile(listViewFolder);
        }

        private void btnRestore_Click(object sender, EventArgs e)
        {
            doRestore();
        }

        private void listViewFolder_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.currentFile = _bak.GetItemListView(listViewFolder);
        }

        private void listViewFolder_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                if (listViewFolder.FocusedItem.Bounds.Contains(e.Location) == true)
                {
                    ctxMenu.Show(Cursor.Position);
                }
            }
        }

        private void menuDel_Click(object sender, EventArgs e)
        {
            if (_bak.DeleteBackup(this.currentFile))
            {
                MsgBox.Show("Đã xóa thành công dữ liệu: " + this.currentFile,"Thông báo",MsgBoxButton.Ok,MsgBoxIcon.Success);
                _bak.LoadSetting();
                _bak.ListBackupFile(listViewFolder);
            }
        }

        private void menuRefresh_Click(object sender, EventArgs e)
        {
            _bak.LoadSetting();
            _bak.ListBackupFile(listViewFolder);
        }

        private void menuRestore_Click(object sender, EventArgs e)
        {
            doRestore();
        }

        void doRestore()
        {
            if (string.IsNullOrEmpty(this.currentFile))
            {
                MsgBox.Show("Vui lòng chọn file dữ liệu cần phục hồi.", "Cảnh báo", MsgBoxButton.Ok, MsgBoxIcon.Stop);
                return;
            }
            Thread thread = new Thread(delegate()
            {
                ReStore(this.currentFile);
            });
            thread.Start();
        }
        void ReStore(string fileName)
        {
            Properties.Settings.Default.Reload();
            BackupInvoke(false, Cursors.WaitCursor);
            SQLServer.ServerName = MainApp.Self.connInfo.DataSource;
            SQLServer.DatabaseName = MainApp.Self.connInfo.InitialCatalog;
            SQLServer.Username = MainApp.Self.connInfo.UserID;
            SQLServer.Password = MainApp.Self.connInfo.Password;
            SQLServer.FilePath = fileName;
            SQLServer.ProgressBar = pBar;
            SQLServer.StatusLabel = lbStatus;
            bool res = SQLServer.Restore(this);
            BackupInvoke(true, Cursors.Default);
            if (res)
            {
                MsgBox.Show("Một thao tác liên quan đến dữ liệu hệ thống. Chương trình sẽ tự khởi động lại sau thông báo này.", "Thông báo", MsgBoxButton.Ok, MsgBoxIcon.Success);
                MainApp.Self.askExit = false;
                RestartAppInvoke();
            }
            else
            {
                MsgBox.Show("Sao lưu dữ liệu không thành công.\n" + SQLServer.Message, "Lỗi xử lý", MsgBoxButton.Ok, MsgBoxIcon.Warning);
            } 

        }
        void BackupInvoke(bool yes, Cursor c)
        {
            this.Invoke((MethodInvoker)delegate
            {
                btnRestore.Enabled = yes;
                this.Cursor = c;
            });
        }

        void RestartAppInvoke()
        {
            this.Invoke(new MethodInvoker(() => MainApp.Self.restartApp()), null);
        }

        private void menuDelAll_Click(object sender, EventArgs e)
        {
            if (MsgBoxResult.Yes != MsgBox.Show(
            "Dữ liệu này rất quan trọng, bạn có muốn xóa hết?",
            "Lưu ý:",
             MsgBoxButton.YesNo,
             MsgBoxIcon.Question))
            {
                return;
            } 

            _bak.DeleteAllBackUp();
            _bak.LoadSetting();
            _bak.ListBackupFile(listViewFolder);
        }
    }
}
